
                             
                             - D I S I D E N T S - H A C K  J O U R N A L -

                                               Numero 2
                                                XVII






                                                            
                                             TITLE:  El TCP-IP a fondo 2
                                             Author: W3ndig0
                                             DISIDENTS ESPAA 2001 -  LOS FUERA DE LA LEY



-------------------------------------------------------------------------------------------------
------------[INDICE ]----------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
----[1.0 Retomando el hilo                                                                      -                  -
----[2.0 RARP (reverse ARP)                                                                     -                      -
----[3.0 UDP (user datagram protocol)                                                           -                              -
----[3.1 Formato de un datagrama UDP                                                            -                             -
----[4.0 TCP                                                                                    -
----[4.1 Estableciendo una conexion TCP                                                         -
----[4.2 Cierre de una conexion TCP                                                             -                            -
----[5.0 Despedida y cierre                                                                     -                                                                 -
-------------------------------------------------------------------------------------------------





-------------------------------------------------------------------------------------------------
------------[1.0 Retomando el hilo ]-------------------------------------------------------------
-------------------------------------------------------------------------------------------------


En la anterior entrega terminabamos introduciendonos en el ARP para retomar el hilo os he copiado 
un poco de aquel final, si no lo teneis ya sabeis que hacer bajaros el ezine 1, creo que asi no 
os perdereis y podeis continuar justo donde lo habiamos dejado.....

>>EL PROTOKOLO ARP (address resolution protokol)

 El ARP sirve para conocer las direcciones ethernet de otras makinas. Lo que
hace es enviar un mensaje a la direccion broadcast
preguntando quien tiene la direccion ip, que estamos buskando..

El receptor contestara con su direccion ethernet

-----------------------------------------------------
Preambulo |dir destino|dir origen| 0806 | datos | CRC|
-----------------------------------------------------

aclaremos lo del 0806

        ARP -> 0806hexadecimal
        Rarp-> 0835h
        IP  -> 0800h

en el campo tipo se indica que dentro del campo de datos, iran datos sobre el
ARP, veamos k datos van ahi...

la forma del campo es esta:

       bits      0                      8                     16           31

___________________________________________________________________
                hardware                                          protocolo

--------------------------------------------------------------------
		 hlen                         plen                operacion

-------------------------------------------------------------------
		 sender ha

-------------------------------------------------------------------
		 sender ha                                        sender ia

-------------------------------------------------------------------
		 targer ia                                        targer Ha

-------------------------------------------------------------------
		 target HA

-------------------------------------------------------------------
		 target IA

-------------------------------------------------------------------
no echeis a corres k os lo expliko ahora...

 Hardware: identifica sobre el hardware sobre el k se esta trabajando..
ethernet=1

 Protocolo: indica el protocolo para el cual se estan empleando las
direcciones logicas..el Ip para que os aclareis..(aunque podia ser otro)

 Hlen: longitud de las direcciones de Hardware..por ejemplo las ethernet son de 48

 Plen: longitud de las direcciones logicas, las direcciones IP como deciamos
antes 32

 Operacion: indica a si esta trama es una trama de pregunta ARP (codigo 1) si es una contestacion
            a una pregunta ARP (codigo 2)....Si es una pregunta RARP* codigo 3 o si es una 
            contestacion a una RARP..codigo 4

 SENDER HA: direccion de hardware a del que envia la trama
 SENDER IA: envio la direccion de internet 4 bytes, la del que envia..
 TARGER HA: Direccion de hardware del destinatario
 TARGER IA: Direccion IP del destinatario

*Rarp (no..tio..no no es un cantante de Rap , es el reverse ARP..lo veremos
enseguida..)

(......)





-------------------------------------------------------------------------------------------------
------------[2.- REVERSE ARP o RARP ]------------------------------------------------------------
-------------------------------------------------------------------------------------------------

Para que es este protocolo?, bien, imaginemos que en nuestro sistema nuestro servidor es quien 
asigna las ips y las maquinas de la red no tienen una ip predefinida, en este caso, cada maquina 
pregunta al servidor por su red mediante el uso del ARP. Imaginemonos una red compuesta por un 
servidor y un monton de ordenadores que simplemente son terminales, y no disponen siquiera de un 
disco duro, este seria un buen sitio donde aplicar el rarp.

Cada ordenador al conectarse realiza una pregunta..cual es mi ip?... como se realiza la pregunta?, 
veiamos antes en la introduccion la extructura..en el caso de un RARP tal como indicamos:

Operacion:Si es una pregunta RARP* codigo 3 o
          si es una contestacion a una RARP..codigo 4

Que pasa en el servidor?...las tablas rarp no son volatiles, y almacenan la informacion del 
hardware de la maquina la direccion MAC relacionandola con la ip que se le ha asignado, bien, el 
servidor consulta esta tabla y responde con una operacion de codigo 4:
Operacion: contestacion RARP..codigo 4

De forma usual tambien se suele acompaar a esta respuesta con la direccion fisica o de hardware 
conjuntamente con la ip que tiene esa direccion asignada...interesante verdad? este puede ser un 
buen metodo para conocer la ip de alguien siempre y en todo momento..ya que con saber la direccion 
fisica el servidor nos contestara con la ip de la maquina asignada, las direcciones fisicas no 
cambian a no ser que se cambie el hardware.

Normalmente no hay un servidor RARP solo en la red, suele haber como minimo 2, el motivo de esto 
es mantener la red en el caso de que uno de ellos falle, asique no es sorprendente que varios 
servidores nos respondan a una pregunta RARP.









-------------------------------------------------------------------------------------------------
------------[3.0 UDP (user datagram protocol) ]--------------------------------------------------
-------------------------------------------------------------------------------------------------

Antes veiamos la diferenciacion entre TCP/IP, el UDP hara uso del protocolo IP para transmitir los 
mensajes, por tanto tendra las caracteristicas del protocolo IP, sera poco fiable, sin conexion 
pero con unos paquetes mucho mas pequeos que el TCP, por eso se mantiene...

Lo que nos aporta el UDP es que dentro de una misma maquina va a permitir diferenciar diferentes 
destinos.

Por ejemplo, dentro de una misma maquina pueden existir varios usuarios...y estos envian paquetes 
o datagramas.

USUARIO 1--------
                 ----->
USUARIO 2-------------> UDP ---------> IP---------------> 
                 ----->
USUARIO 3--------










-------------------------------------------------------------------------------------------------
------------[3.1 Formato de un datagrama UDP ]---------------------------------------------------
-------------------------------------------------------------------------------------------------

            0			   16			  31
            | Puerto de origen     | puerto de destino     |
            | longitud             | checksum              |  
            | datos UDP            |                       | 
            | ---------------------------------------------|
El puerto de origen distingue a los usuarios en la maquina de origen
el puerto de destino, distinguira a los usuarios en la maquina de destino 
    
	Despues esta informacion es "montada" en un datagrama  de tipo IP, pero el problema esta
en que como veiamos un datagrama ip tenia la siguiente extructura:

            CABEZERA IP    DATOS (y en nuestro caso el mensaje UDP)
	
	Logicamente vemos que si solo le pasamos esa informacion...no se va a saber donde enviarla...
Por ello hay que hacer un pequeo apao, sera pasarle la Sub cabezera UDP al IP para que con ello
conforme un datagrama del siguiente tipo.

		Direccion IP origen
                Direccion IP destino
                Zero      protocolo       longitud
Zero es un relleno
Protocolo identifica que tipo de protocolo enviamos, en este caso un UDP, identificado por 17.

		213.213.123.123
                61.168.28.42
                zero 17 longtitud 











-------------------------------------------------------------------------------------------------
------------[4.- TCP (Transport control protocol) ]----------------------------------------------
-------------------------------------------------------------------------------------------------

El tcp es el protocolo mas fiable de transmision, y esta orientado a una conexion entre dos 
maquinas, cuando hablamos de orientado a la conexion nos referimos que antes de que ninguna de 
las dos maquinas se pongan a intercambiar datos estas maquinas se van a poner deacuerdo de si 
estan a la escucha y dipuestas a recibir datos. Es decir, se asegura que existira un intercambio 
de informacion, a diferencia de lo que sucedia con el UDP.

Para realizar este control el protocolo TCP emplea 6 bits.

			URG,ACK,PSH,SYN,FIN,RTS

Ahora veremos donde van esos bits y como funciona, primero vamos a ver como es la extructura 
de un datagrama TCP

        |-------------------------------------------------------------------|
	|Puerto de entrada                                |Puerto de salida |
        |-------------------------------------------------------------------|
	|Numero de secuencia						    |	
        |-------------------------------------------------------------------|
	|ACKNOWLEDGEMENT number                                             | 
        |-------------------------------------------------------------------|
	|OFF |RES |Codigo(URG,ACK,PSH,SYN,FIN,RTS)| Window                  | 
        |-------------------------------------------------------------------|
	|Checksum				 | Urgent pointer           |
        |-------------------------------------------------------------------|
	|Opciones						    |PADDING|
	|-------------------------------------------------------------------|
	|DATOS                                                              |
        |-------------------------------------------------------------------|

En una sub-cabezera UDP ya que como antes haciamos hay que pasarlo a IP en protocolo sera 6
				TCP=6
				UDP=17

			213.213.123.123
        	        61.168.28.42
                	zero 6 longtitud
					(ver lo del UDP si no os aclarais..)

	
Veamos como siempre que es cada cosa:

	PUERTO DE ENTRADA: es el puerto por el cual el emisor desea hacer la conexion.
                
	PUERTO DE SALIDA: es el puerto por el cual el emisor envia.
 		
	NUMERO DE SECUENCIA:Es una numeracion del paquete o del numero de butes de datos, 
                            como querais.
		
	OFF: Se trata de un campo que permite saber donde empiezan los datos del mensaje, 
             ya que la cabezera no siempre es la misma y es necesario saber en que posicion estan
             los datos en el paquete.	
		
	WINDOW: Este campo indica el numero de bytes que puede aceptar una maquina que envia 
                el mensaje TCP a partir del numero de secuencia del acuse de recibo 
		
	CHECKSUM: Tiene la misma funcion que en los datagramas UDP sirve para comprovar la veracidad 
                  delpaquete o para diferenciarlo, es = a cabecera+subcabecera, es igual que la letra 
                  del nif, 1123245-(M) eso es un checksum (y no, ese no es mi dni, ni el de nadie 
                  creo.. :) )
		
	URGENTPOINTER: Imaginemos que nuestro mensaje es urgente o ha de ser procesado con urgencia, 
                       en este campo indicamos la posicion de los datos que han de ser tratados con 
                       urgencia, Solo se usa si el bit URG del campo codigo esta a 1 (ahora lo veremos...) 

        OPCIONES: Suelen ser directivas sobre los parametros de la comunicacion, es opcional, un 
                  ejemplo podria ser el tamao maximo de datagrama, mas que nada sirve para definir los 
                  parametros de la comunicacion si estos han de ser de un modo especifico, no todos los 
                  paquetes llevan este campo.
		
	PADDING: Se trata de un campo de relleno, porque? porque la cabezera debe de ser un multiplo de 32 
                 bits y como el campo opciones tiene una logitud variable, se completa hasta un multiplo de 
                 32 bits en el padding
                        
	CODIGO: aqui viene lo bonito, URG,ACK,PSH,SYN,FIN,RTS veamos que es cada uno de ellos:

	URG: si este bit esta a 1 (recordar URGENT POINTER) hay informacion que debe de ser procesada
			
	ACK: Indica que el acuse de recibo es valido...ya profundizaremos en esto...
			
	PSH: Si esta a 1, los datos han de ser entregados de forma inmediata a la aplicacion, no son 
	     pasados al buffer, humm seguro que quereis un ejemplo..veamos..en una sesion de 
             telnet la aplicacion debe de responder inmediatamente, con este bit lo que se hace es  
             que no pasen por un buffer y sean directamente enviados a la aplicacion, motivo por el cual, 
             telnet lee caracter a caracter, no como en el caso de un FTP en el cual los mensajes son 
             leidos por lineas.
			
	SYN: Este bit si esta a 1 es el que indica que se esta haciendo una peticion de conexion, osea 
             se pide un inicio de la comunicacion.

	FIN: Es lo mismo que un SYN solo que a la inversa, si esta a 1 indica que se quiere dejar la 
             comunicacion
			     
        RTS: Se pone a 1 cuando se quiere abortar inmediatamente una conexion y no va a ser enviado
             nada mas.






-------------------------------------------------------------------------------------------------
------------[4.1 Establecimiento de una conexion TCP ]-------------------------------------------
-------------------------------------------------------------------------------------------------


Que sucede cuando establecemos una conexion TCP? que mensajes se intercambian?....

Se van a intercambiar 3 mensajes;

      1) El primero de todos sera un SYN, osea un segmento TCP con el bit SYN =1 y un numero
de secuencia inicial.

      2) La maquina a la que se envia la peticion envia un SYN=1 y ACK=1 ,la secuencia, y un numero para
el acuse de recibo que es igual al numero de secuencia enviado por el interesado en la conexion +1.

      3) La maquina del interesado responde con otro ACK=1 el numero de secuencia +1 y con un acuse de
recibo de la maquina aceptante +1 .

veamoslo de forma grafica..

	1) INTERESADO ----------------------->SYN seq=x >>>>>>    ACEPTANTE 
	2) INTERESADO <<<SYN seq=y ack=x+1 ACK=1<<--------------  ACEPTANTE
	3) INTERESADO ------------------>ACK seq=x+1 ack=y+1>>    ACEPTANTE








-------------------------------------------------------------------------------------------------
------------[4.2 Cierre de una conexion TCP ]----------------------------------------------------
-------------------------------------------------------------------------------------------------

   Supongamos que es la maquina INTERESADO la que desea romper la conexion 

     La maquina INTERESADO manda un FIN y un ACK, con le numero de secuencia que le corresponda 
     (V) y devuelve un acuse de recibo con el numero correspondiente (w).

     La maquina ACEPTANTE devuelve un ACK (aceptado cierre) un numero de secuencia w y un acuse 
     de recibo V+1

     con esto hemos cerrado la conexion en un sentido pero ACEPTANTE puede continuar enviando 
     mensajes a INTERESADO
 
     Para que ACEPTANTE cierre la conexion, ha de envia a INTERESADO de las mismas caracteristicas que lo anterior,
	quedando asi cerrada la conexion.

igual que antes veamoslo de modo grafico:

	1) INTERESADO ----------------------->FIN ACK seq=v ack=w >>>>>>    ACEPTANTE 
	2) INTERESADO <<<ACK seq=w ack=v+1<<------------------------------  ACEPTANTE

y ahora al reves

	3) ACEPTANTE ----------------------->FIN ACK seq=v ack=w >>>>>>    INTERESADO
	4) ACEPTANTE <<<ACK seq=w ack=v+1<<------------------------------  INTERESADO

y todos os preguntareis ahora que pasa con el bit RST? osea aborta inmediatamente...

bien el el caso de un envio RST, directamente no hace falta nada mas, se cierra la conexion 
inmediatamente solo hace falta el envio de este paquete.



-------------------------------------------------------------------------------------------------
------------[5.- Despedida y cierre. ]-----------------------------------------------------------
-------------------------------------------------------------------------------------------------

 Hasta aqui hemos llegado pasando por enzima del tcp-ip sin llegar a extremos donde algunos
podriais perder el hilo y otros directamente quereis mas...profundizar mas...

	En la proxima entrega estoy estudiando la posibilidad de profundizar mas en protocolos 
 como el ARP y RARP pero he preferido primero daros todo el bloque para despues irnos metiendonos 
de lleno en algunos apartados en los que me gustaria expandir y dedicar todo un capitulo entero a
ellos.

 Bueno pues me toca despedirme, espero que os guste y le saqueis provecho ademas de resolveros 
dudas o expandir los conocimientos que previamente tubieseis.










---------------------------------------------------
-       CONTACTA CONMIGO O CON EL TEAM            -
---------------------------------------------------
- NICK:	    W3ndig0                               -
- CARGO:    Director de Disidents Espaa          -    
- MAIL:     w3ndig0disidents@yahoo.com	          -	
- TEAM:     disidents@yahoo.es                    -
---------------------------------------------------


                                                              Disidents Espaa  2001 2 edicion. 
-------------------------------------------------------------------------------------------------


                     @@-------               @@---------------  
		    @@----                  @@---------       @@@@@@@@@  
		   @@--     @@@@@--        @@-- @@@@@       @     @@  @@@@@@@@@@@@@@@@@@@@@@@@@@@@-------
              @@@@@@    @@ @@      @@ @@@@@@-  @@      @@@ @    @@  @@-----------------------------
             @@        @@ @@@@@   @@ @@---    @@@@@@   @@ @@   @@  @@@@@--------------
            @@        @@     @@  @@ @@ -     @@       @@ @@   @@      @@----------
             @@@@@@@ @@  @@@@@@ @@   @@@@@@@ @@@@@@@ @@  @@ @@	     @@--------
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@------
-------------------------------------------------------------------------
	